package com.sc.nft.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.dto.*;
import com.sc.nft.entity.MallProduct;
import com.sc.nft.entity.vo.MallProductVO;
import com.sc.nft.entity.vo.SaasTaskDetailsCollectionVO;
import com.sc.nft.entity.vo.VirtualMallProductSpecsVO;
import com.sc.nft.enums.ApprovalStatusEnum;
import com.sc.nft.enums.ProductTypeEnum;
import com.sc.nft.enums.task.ActivityTypeEnum;

import java.util.List;

/**
 * IP商城商品表服务接口
 *
 * @author zxy
 * @description IP商城
 * @since 2023-05-10 16:59:01
 */
public interface MallProductService {

    /**
     * 商户商品列表
     */
    IPage<ProductPageDTO> getProductPage(Long categoryId, ProductTypeEnum type, ApprovalStatusEnum approvalStatus, Long daoId, String name, Page page, Long supplierId,String supplierName);

    /**
     * 商品推荐列表
     */
    IPage<ProductRecommendDTO> getProductRecommend(ActivityTypeEnum activityType, ProductTypeEnum type, Boolean status, Long daoId, String name, Page page);

    /**
     * 添加智慧供应链商品
     */
    void addSmartSupplyProduct(String data);


    /**
     * 商品详情
     *
     * @param id
     * @return
     */
    ProductDetailDTO detail(Long id);

    /**
     * 商品规格列表
     */
    List<MallProductSpecsDTO> productSpecsList(Long productId);

    /**
     * 审核
     *
     * @param id
     * @param pass
     * @param approvalRemark
     */
    void approval(Long id, Boolean pass, String approvalRemark);

    /**
     * 是否允许使用购物金
     * @param id
     * @param allowed
     */
    void allowedShoppingCoupons(Long id, Boolean allowed);

    MallProduct getById(Long productId);

    /**
     * 添加推荐
     *
     * @param activityId
     * @param recommendWord
     */
    void addRecommend(Long activityId, String recommendWord);

    /**
     * 批量添加推荐
     *
     * @param activityIds
     */
    void addBatchRecommend(List<Long> activityIds);

    void removeRecommend(Long id);

    void setRecommendSort(Long id, Integer sort);

    void setRecommendWord(Long id, String recommendWord);

    /**
     * 添加热卖商品
     *
     * @param activityId
     * @param hotSaleImage
     * @param hotSaleTitle
     * @param sort
     */
    void addHotSaleActivity(Long activityId, String hotSaleImage, String hotSaleTitle, Integer sort);

    void removeHotSaleActivity(Long id);

    void setHotSaleSort(Long id, Integer sort);

    void setHotSaleStatus(Long id, Boolean status);

    IPage<ProductHotSaleDTO> hotSalePage(ActivityTypeEnum activityType, ProductTypeEnum type, Boolean status, Long daoId, String name, Page page);

    /**
     * 修改分类名称
     *
     * @param id
     * @param name
     */
    void setCategoryName(Long id, String name);

    void setIsBrandUse(Long id, Boolean isBrandUse);

    void setIsShow(Long id, Boolean isShow);

    void removeCategory(Long id);

    /**
     * 修改是否是虚拟分类
     *
     * @param id
     * @param isVirtual
     */
    void setIsVirtual(Long id, Boolean isVirtual);

    void setCategorySort(Long id, Integer sort);

    /**
     * 热卖商品下架
     *
     * @param activityId
     */
    void offShelf(Long activityId);

    List<MallProduct> simpleList(String productName);

    /**
     * 添加商品
     *
     * @param mallProductVO
     * @return
     */
    MallProduct addPassProduct(MallProductVO mallProductVO);

    /**
     * 编辑商品
     *
     * @param mallProductVO
     * @return
     */
    MallProduct editPassProduct(MallProductVO mallProductVO);


    /**
     * 删除商品
     *
     * @param id
     */
    void del(Long id);

    /**
     * 添加规格(即添加虚拟商品)
     *
     * @param virtualMallProductSpecsVO
     */
    void addProductSpecs(VirtualMallProductSpecsVO virtualMallProductSpecsVO);

    /**
     * 删除规格(即删除虚拟商品)
     *
     * @param productId
     * @param id
     */
    void removeProductSpecs(Long productId, Long id);

    /**
     * 删除规格(即删除虚拟商品)
     *
     * @param specsId
     * @param name
     */
    void editProductSpecs(Long productId, Long specsId, String name);
    /**
     * 根据id集合获取商品简单信息
     *
     * @param ids
     * @return
     */
    List<SaasTaskDetailsCollectionVO> getMallProductSimplenessByIds(List<Long> ids);
}
